import App from "./App.vue";
import uView from './uni_modules/vk-uview-ui';
import * as Pinia from 'pinia';
import {
  createUnistorage
} from './uni_modules/pinia-plugin-unistorage'
  import {
    useUserStore
  } from "/src/store/user.js"
import {
  createSSRApp
} from 'vue'
import {
  $http,
} from '@escook/request-miniprogram'
uni.$http = $http
// 配置请求根路径
$http.baseUrl = 'http://127.0.0.1:8000'
// 请求开始之前做一些事情
$http.beforeRequest = function(options) {
  uni.showLoading({
    title: '数据加载中...',
  })
  // 如果存在 token，添加 Authorization 请求头
  const userstore = useUserStore()
  const token = userstore.user.token;
  // console.log(userstore.user);
  if (token) {
    options.header = {
      ...options.headers, // 原有的请求头信息
      'Authorization': `Bearer ${token}` // 携带 token
    }
  }
}
// 请求完成之后做一些事情
$http.afterRequest = function(response) {
  uni.hideLoading()
  // 响应状态码为 401，跳转到登录页
  if (response.statusCode === 401) {
    uni.showToast({
      title: '请重新登录',
      duration: 2000,
      icon: "error"
    });
    const userstore = useUserStore()
         userstore.$reset()
         uni.redirectTo({
             url: '/pages/my/my'
           }) 
    return Promise.reject(new Error('未授权，请重新登录'))
  }
  // 响应成功，返回响应数据
  return response
}
export function createApp() {
  const app = createSSRApp(App);
  // 状态管理
  const store = Pinia.createPinia()
  // 持久化
  store.use(createUnistorage())
  app.use(store)
  // 使用 uView UI
  app.use(uView)
  return {
    app,
    Pinia,
  }
}